📘 Clase 06: Testing Riguroso con Pytest, Mocks y Calidad
- :material-bookmark: Curso: Curso 4: Taller Práctico & Proyecto Final Integrador (CLASE 06)
- :material-signal-cellular-outline: Nivel:
Nivel 4 - Integrador - :material-lightbulb-on: Metáfora Central: «El Laboratorio de Control de Calidad y las Pruebas de Estrés»
- :material-laptop: Wisrovi Studio (Local): 🚀 Abrir Reto • 👨🏫 Modo Tutor
- :material-file-pdf-box: Manual PDF Oficial: Descargar clase-06-testing-y-calidad.pdf
1. 💡 Fundamentación Teórica y Modelo Mental
Garantía de calidad mediante pruebas automatizadas exhaustivas:
1. Pytest & Fixtures: Reutilización de estados de prueba limpios y desacoplados.
2. Mocks & Spies (unittest.mock): Simulación de llamadas a APIs externas sin gastar tokens reales.
3. Métricas de Cobertura (Coverage): Asegurar un mínimo del 85%+ de líneas evaluadas por la suite.
🌟 Modelo Mental de la Sesión: «El Laboratorio de Control de Calidad y las Pruebas de Estrés»
En esta sesión anclamos el aprendizaje en la metáfora del mundo real para visualizar cómo fluyen las estructuras de datos y el flujo de ejecución en la memoria.
2. 🗺️ Arquitectura de Ejecución y Diagrama de Flujo
flowchart TD
A["🧪 Suite de Pruebas Pytest"] --> B["🔬 Test Unitarios (Funciones)"]
A --> C["🌐 Test de Integración (API Endpoints)"]
A --> D["🎭 Mocks de LLM (Zero Cost)"]
B & C & D --> E{"¿Cobertura >= 85% y 0 Fallos?"}
E -->|Sí| F["🏆 Aprobado para Despliegue"]
E -->|No| G["⛔ Bloqueo en Pipeline"]
style A fill:#1e293b,color:#ffffff,stroke:#3b82f6,stroke-width:2px
style F fill:#059669,color:#ffffff,stroke:#34d399,stroke-width:2px
style G fill:#881337,color:#ffffff,stroke:#fb7185,stroke-width:2px
3. 💻 Código de Implementación Práctica
```python def evaluar_calidad_demo(passed: int, total: int, coverage: float) -> bool: return (passed == total) and (coverage >= 85.0)
print("¿Calidad certificada?:", evaluar_calidad_demo(34, 34, 94.5)) ```
```python assert 2 + 2 == 4, "Aserción básica válida"
print("Aserción completada.") ```
4. 🛡️ Buenas Prácticas PEP 8: Antipatrones vs Código Pythonic
⚠️ Cuidado con los Antipatrones
5. 🏋️ Desafío Práctico de la Clase
🎯 Enunciado del Reto
Crea una función suite_calidad_codigo(cobertura_pct: float, tests_fallidos: int) -> tuple[bool, str] que retorne (True, 'Certificado') si cobertura_pct >= 85.0 y tests_fallidos == 0, o (False, 'Calidad insuficiente') en caso contrario.
⚡ Resolución Híbrida en 1 Clic (Local + Web)
Si tienes ejecutando wisrovi ui en tu terminal local, puedes 🚀 Abrir este Reto directamente en tu Studio Local (127.0.0.1:8501) para escribir tu código con auto-formateo AST, inspeccionar variables en el Heap/Stack y evaluarlo con pruebas en tiempo real.
💡 Pista Socrática 1
💡 Pista 1: Comprueba cobertura_pct >= 85.0 and tests_fallidos == 0.
💡 Pista Socrática 2
💡 Pista 2: Si cumple, retorna (True, 'Certificado').
💡 Pista Socrática 3
💡 Pista 3: En caso contrario retorna (False, 'Calidad insuficiente').
Para resolver este ejercicio en tu entorno:
1. Abre el archivo ejercicios/reto.py de esta clase en Visual Studio Code o utiliza wisrovi ui / wisrovi tutor.
2. Implementa tu solución cumpliendo los requisitos y contratos de tipado.
3. Valida tus resultados ejecutando las pruebas unitarias: